Skip to content

Next Release - #3761

Merged
isekovanic merged 6 commits into
mainfrom
develop
Aug 6, 2026
Merged

Next Release#3761
isekovanic merged 6 commits into
mainfrom
develop

Conversation

@isekovanic

Copy link
Copy Markdown
Contributor

🎯 Goal

πŸ›  Implementation details

🎨 UI Changes

iOS
Before After
Android
Before After

πŸ§ͺ Testing

β˜‘οΈ Checklist

  • I have signed the Stream CLA (required)
  • PR targets the develop branch
  • Documentation is updated
  • New code is tested in main example apps, including all possible scenarios
    • SampleApp iOS and Android
    • Expo iOS and Android

oliverlaz and others added 6 commits August 4, 2026 17:21
…ig presets (#3663)

## What & why

Upgrades every workspace to **TypeScript 6.0.3** with **`target:
ES2022`**, and removes tsconfig duplication via a new shared preset
package. Enabling type-checking across the previously-unchecked packages
also surfaced (and this PR fixes) a pre-existing bug in the core
package's published type resolution plus a batch of latent type errors.

## Changes

### Shared config
- New **private** `@stream-io/typescript-config` workspace
(`configs/typescript-config/`):
- `base.json` β€” cross-cutting policy (ES2022 target, strict, interop, …)
  - `library.json` β€” full React Native library config (extends `base`)
- Core, the native/expo wrappers, and all 3 example apps extend these
instead of duplicating compiler options. Example apps array-extend
`["<framework base>", "@stream-io/typescript-config/base.json"]`.

### TypeScript 6.0.3 / ES2022
- TS `6.0.3` in all 7 manifests; `target: ES2022` everywhere.
- `lib` kept at `ESNext` β€” the SDK uses the ES2023
`Array.prototype.toReversed()`.
- TS 6.0 no longer auto-includes `@types/jest`, so it's referenced
explicitly from a test-only `package/src/__tests__/jest-globals.d.ts`
(excluded from the published build).

### Core publishing fix (consumer-facing)
- `react-native-builder-bob` emitted declarations under
`lib/typescript/src/` while `package.json#types` pointed at
`lib/typescript/index.d.ts` β€” so TS consumers couldn't resolve the SDK's
types via `types`. Added `rootDir: "./src"` so declarations emit flat to
match `types`. This was also the root cause that blocked the
wrappers/examples from resolving core's types.
- Exported `PickImageOptions` from the core entrypoint (defined+exported
in `native.ts` but never surfaced from `index`).

### Wrappers (`stream-chat-react-native`, `stream-chat-expo`)
- Added a `typecheck` script + tsconfig (they had neither). The dynamic
optional-`require` shims relax `noImplicitAny`/`strictNullChecks`/unused
checks (kept `noImplicitReturns`).
- Fixed real bugs: missing `return`s in `shareImage`, missing
`resizeMode`/`rate` on the video shim, an inconsistent `startRecording`
return shape.

### Example apps
- Fixed ~60 pre-existing latent type errors unmasked by enabling
typecheck: theme palette typing (the legacy flat `colors` palette, read
via a local `AppTheme` cast β€” behavior-preserving), null-safety guards,
and several SDK-API-drift fixes.

### CI
- `check-pr.yml` now runs `yarn typecheck` across the whole workspace
(core + 2 wrappers + 3 examples) instead of only the core package; the
root `typecheck` aggregate includes the wrappers.

## Verification
- `yarn build` βœ…
- `yarn typecheck` (core + 2 wrappers + 3 examples) βœ… **0 errors**
- `yarn lint` βœ…

## Notes for reviewers
- **Commit type**: filed as `chore:` (release-neutral). The core changes
(flat `types` path + `PickImageOptions` export) are genuinely
consumer-facing β€” if you want them shipped, retype as `fix:` to cut a
patch.
- **Wrapper strictness**: `strictNullChecks`/`noImplicitAny` are relaxed
**only** for the two wrapper packages (dynamic optional-dep shims), not
for core.
- **Example theming**: the apps' custom `colors` palette was already
inert for SDK theming (the SDK reads semantics/primitives, not
`theme.colors`); this PR preserves that behavior. Migrating the palette
to the token model to restore custom branding would be a separate
enhancement.
- Did not run the full unit suite locally (the only core source change
is the additive `PickImageOptions` export); CI runs `test:coverage`.

---------

Co-authored-by: Ivan Sekovanikj <ivan.sekovanikj@getstream.io>
## 🎯 Goal

- Consolidate `AGENTS.ms` and `CLAUDE.md` -> `CLAUDE.md` will stay only
as a reference
- Add skill reference to `README.md` file
- Remove stale references/info

## πŸ›  Implementation details

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

For some reason, it would appear that video attachments picked from the
photo library show no thumbnail when `PhotoKit` had no cached poster
frame for the asset, so the image request fails with
`PHPhotosErrorDomain 3303` and generation bails. Hits uncached/freshly
imported library videos on devic, and always hits videos added to a
Simulator via `simctl addmedia` as an example (which won't immediately
generate poster images unless you open the `Photos` app for example).

## πŸ›  Implementation details

iOS `StreamVideoThumbnailGenerator`:

- Switched the `PhotoKit` request from `.fastFormat` to
`.highQualityFormat`. `.fastFormat` only returns an already cached
rendition and won't generate one on demand (contrary to my previous
belief), so uncached assets come back empty. `.highQualityFormat`
renders the poster on demand at the requested `targetSize`, so still
only the poster frame and not the whole video
- Lowered `maxDimension` from `512` to `256`. `.highQualityFormat`
honors `targetSize` (unlike `.fastFormat`, which ignores it and always
returns a fixed `~120px` from my tests), so `256px` is crisp at the
picker cell for ~1/4 the decoded RAM. Android intentionally stays at 512
as its `getScaledFrameAtTime` scaler is cruder and needs more source
pixels (documented in a code comment)

Reducing the size of the generated tuhmbnails is considered safe as this
was anyway happening with `.fastFormat` (as mentioned it appears to
simply return smaller images rather than play around with downscaling
specifically). If anything, it's an increase in quality as from my
benchmarks it showed that loading ~200 video thumbnails all at the same
time (this is a very pessimistic test of course) rounds out to about
~20MB of extra ram usage. And this is even before taking image
optimizations into account, which would alleviate decoding cycles as
well. So the quality should be much better while paying almost nothing.
So in essence we're basically trying to mimic what `.fastFormat` does
itself but with some extra exploration around it.

## 🎨 UI Changes

<details>
<summary>iOS</summary>
</details>

<details>
<summary>Android</summary>

No Android changes.
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

This is something long overdue, since we aren't really spending too much
time updating or really taking care of housekeeping for the
`TypescriptMessagingApp`. Especially since `SampleApp` is pretty much
the same, but with a bunch extra features. Hence, I'm removing it so
that it stops cluttering everything.

## πŸ›  Implementation details

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

This PR bumps the `react-native-nitro-sound` version to latest as a new
version's been released which should resolve the iOS release only build
issues.

It's basically a continuation of [this
PR](#3650),
where the details and the reference ticket should be explained. Since
the issue was only happening with Testflight builds specifically for our
`SampleApp`, we can test on the actual one when it comes out.

## πŸ›  Implementation details

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

Resolves [this Zendesk
ticket](https://getstream.zendesk.com/agent/tickets/82587).

## πŸ›  Implementation details

`expo-clipboard` has changed their API from the synchronous `setString`
to the asynchronous `setStringAsync`. Our optional dependency for this
exact purpose was never really updated and so copying messages did not
work whenever using `stream-chat-expo`.

In this PR we address that.

Additionally, I noticed that a confirmation/failure snackbar was missing
from the clipboard feature and so we add one as well. Since changing to
an async API is technically breaking, we'll rely on the success/failure
callbacks for now and update this in the next major. We anyway want to
get rid of the dependencies to these super small libraries and keep them
inhouse.

Will be backported to V8 as well.

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Next releases

v9.7.3

9.7.3 (2026-08-06)

Bug Fixes

sampleapp@v4.14.5

4.14.5 (2026-08-06)

Bug Fixes

@Stream-SDK-Bot

Copy link
Copy Markdown
Contributor

SDK Size

title develop branch diff status
js_bundle_size 1991 KB 1991 KB 0 B 🟒

@isekovanic
isekovanic merged commit 2b40b6d into main Aug 6, 2026
14 of 18 checks passed
@stream-ci-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in version 9.7.3 πŸŽ‰

The release is available on:

Your semantic-release bot πŸ“¦πŸš€

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants